package steffen;

/**
 * Klasse, die einen einzelnen ausführbaren Menüpunkt repräsentiert.
 * 
 * @author Steffen Krüger
 * @version 1.0
 * 
 * @see Menü
 */
public class Menüpunkt implements Runnable
{
    /**
     * Speichert den Titel des Menüs
     */
    private String titel;
    
    /**
     * Speichert die auszuführende Methode in Form eines Runnable Objektes
     */
    private Runnable exec;
    
    /**
     * Konstruktor, um nur einen String übergeben zu können.
     * Leitet an den Hauptkonstruktor weiter
     * 
     * @param title Name des Menüs oder des Menüpunktes
     */
    protected Menüpunkt(String title)
    {
        this(title, null);
    }
    
    /**
     * Hauptkonstruktor
     * 
     * @param title Name des Menüs oder des Menüpunktes
     * @param exec Methode, die durch den jeweiligen Menüpunkt aufgerufen wird
     */
    public Menüpunkt(String title, Runnable exec)
    {
        this.titel  = title;
        this.exec   = exec;
    }
    
    /**
     * Getter für den Titel
     * 
     * @return Titel
     */
    public String getTitel()
    {
        return titel;
    }
    
    /**
     * Gibt zurück, ob die aktuelle Instanz ausgeführt wird
     * 
     * @return boolean
     */
    public boolean isExec()
    {
        return exec != null;
    }
    
    /**
     * Setter für die auszuführende Methode
     * 
     * @param exec auszuführende Methode
     */
    protected void setExec(Runnable exec)
    {
        this.exec = exec;
    }

    /**
     * Ausführen der übergebenen Methode
     */
    public void run()
    {
        try
        {
            System.out.println("\n");
            exec.run();
            System.out.println("\n");
        } catch (Throwable t)
        {
            t.printStackTrace(System.err);
        }
    }
}
